/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.DocumentoDocumentoModel;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Santos
 */
public class DocumentoDocumentoDAO extends AbstractDAO
        implements InterfaceDAO<List<br.com.documentar.model.DocumentoDocumentoModel>, br.com.documentar.model.DocumentoDocumentoModel> {

    @Override
    public boolean setDados(DocumentoDocumentoModel model) {
        String sql = null;
        ConnectDataBase();
        switch (model.getActionScript()) {

            case "I":
                sql = "INSERT INTO \n"
                        + "  `tlnk_documento_documento`\n"
                        + "(\n"
                        + "  `TDOC_DOCUMENTO_PK1`,\n"
                        + "  `TDOC_DOCUMENTO_PK2`) \n"
                        + "VALUE (\n"
                        + "  " + model.getDocumentoOrigem().getCodigo() + ",\n"
                        + "  " + model.getDocumentoDestino().getCodigo() + ")";
                break;
            case "U":
                sql = "Não implementa essa funcionalidade";
                break;
            case "D":
                sql = "DELETE FROM \n"
                        + "  `tlnk_documento_documento` \n"
                        + "WHERE \n"
                        + "  `TDOC_DOCUMENTO_PK1` = " + model.getDocumentoOrigem().getCodigo() + " AND \n"
                        + "  `TDOC_DOCUMENTO_PK2` = " + model.getDocumentoDestino().getCodigo() + "";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<DocumentoDocumentoModel> getDados(DocumentoDocumentoModel model) {
        model.setResultSet(null);
        model.getListaDocumento().clear();
        String sql = "select * from (SELECT \n"/*documento origem*/
                + "    `produto`.`TPRO_CODIGO_PK`,\n"
                + "    `produto`.`TPRO_NOME`,\n"
                + "    `versao`.`TVER_CODIGO_PK`,\n"
                + "    `versao`.`TVER_NOME`,\n"
                + "    `categoria`.`TCAT_CODIGO_PK`,\n"
                + "    `fnc_caminho_completo`( `categoria`.`TCAT_CODIGO_PK`) TCAT_NOME,\n"
                + "    `tela`.`TTEL_CODIGO_PK`,\n"
                + "    `fnc_caminho_completo_tela`(`tela`.`TTEL_CODIGO_PK`) TTEL_NOME,\n"
                + "    `documentoDocumento`.`TDOC_DOCUMENTO_PK1`,\n"
                + "    `documento`.`TDOC_CAMPO`,\n"
                + "    `documentoDocumento`.`TDOC_DOCUMENTO_PK2`\n"
                + " FROM \n"
                + "    `tlnk_documento_documento` `documentoDocumento`\n"
                + "    inner join `tdoc_documento` `documento`\n"
                + "    on `documentoDocumento`.`TDOC_DOCUMENTO_PK1` = `documento`.`TDOC_CODIGO_PK` \n"
                + "    inner join `tlnk_categoria_versao` `categoriaVersao`\n"
                + "    on `documento`.`TDOC_CATEGORIA_FK` = `categoriaVersao`.`TLNK_CATEGORIA_FK_PK`\n"
                + "    and `documento`.`TDOC_VERSAO_FK` = `categoriaVersao`.`TLNK_VERSAO_FK_PK`\n"
                + "    and `documento`.`TDOC_TELA_FK` = `categoriaVersao`.`TLNK_TELA_FK_PK`\n"
                + "    inner join `tver_versao` `versao`\n"
                + "    on `categoriaVersao`.`TLNK_VERSAO_FK_PK` = `versao`.`TVER_CODIGO_PK`\n"
                + "    inner join `tpro_produto` `produto`\n"
                + "    on `versao`.`TVER_PRODUTO_FK` = `produto`.`TPRO_CODIGO_PK`\n"
                + "    inner join `tcat_categoria` `categoria`\n"
                + "    on `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `categoria`.`TCAT_CODIGO_PK`\n"
                + "    inner join `ttel_tela` `tela`\n"
                + "    on `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `tela`.`TTEL_CATEGORIA_FK`\n"
                + "    and `categoriaVersao`.`TLNK_TELA_FK_PK` = `tela`.`TTEL_CODIGO_PK`) doc1\n"
                + " inner join (SELECT \n" /*documento destino*/
                + "    `produto`.`TPRO_CODIGO_PK` TPRO_CODIGO_PK2,\n"
                + "    `produto`.`TPRO_NOME` TPRO_NOME2,\n"
                + "    `versao`.`TVER_CODIGO_PK` TVER_CODIGO_PK2,\n"
                + "    `versao`.`TVER_NOME` TVER_NOME2,\n"
                + "    `categoria`.`TCAT_CODIGO_PK` TCAT_CODIGO_PK2,\n"
                + "    `fnc_caminho_completo`( `categoria`.`TCAT_CODIGO_PK`) TCAT_NOME2,\n"
                + "    `tela`.`TTEL_CODIGO_PK` TTEL_CODIGO_PK2,\n"
                + "    `fnc_caminho_completo_tela`(`tela`.`TTEL_CODIGO_PK`) TTEL_NOME2,\n"
                + "    `documentoDocumento`.`TDOC_DOCUMENTO_PK1` TDOC_DOCUMENTO_PK1,\n"
                + "    `documento`.`TDOC_CAMPO` TDOC_CAMPO2,\n"
                + "    `documentoDocumento`.`TDOC_DOCUMENTO_PK2`\n"
                + " FROM \n"
                + "    `tlnk_documento_documento` `documentoDocumento`\n"
                + "    inner join `tdoc_documento` `documento`\n"
                + "    on `documentoDocumento`.`TDOC_DOCUMENTO_PK2` = `documento`.`TDOC_CODIGO_PK` \n"
                + "    inner join `tlnk_categoria_versao` `categoriaVersao`\n"
                + "    on `documento`.`TDOC_CATEGORIA_FK` = `categoriaVersao`.`TLNK_CATEGORIA_FK_PK`\n"
                + "    and `documento`.`TDOC_VERSAO_FK` = `categoriaVersao`.`TLNK_VERSAO_FK_PK`\n"
                + "    and `documento`.`TDOC_TELA_FK` = `categoriaVersao`.`TLNK_TELA_FK_PK`\n"
                + "    inner join `tver_versao` `versao`\n"
                + "    on `categoriaVersao`.`TLNK_VERSAO_FK_PK` = `versao`.`TVER_CODIGO_PK`\n"
                + "    inner join `tpro_produto` `produto`\n"
                + "    on `versao`.`TVER_PRODUTO_FK` = `produto`.`TPRO_CODIGO_PK`\n"
                + "    inner join `tcat_categoria` `categoria`\n"
                + "    on `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `categoria`.`TCAT_CODIGO_PK`\n"
                + "    inner join `ttel_tela` `tela`\n"
                + "    on `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `tela`.`TTEL_CATEGORIA_FK`\n"
                + "    and `categoriaVersao`.`TLNK_TELA_FK_PK` = `tela`.`TTEL_CODIGO_PK`) doc2\n"
                + "    on doc1.TDOC_DOCUMENTO_PK1 = doc2.TDOC_DOCUMENTO_PK1\n"
                + "    and doc1.TDOC_DOCUMENTO_PK2 = doc2.TDOC_DOCUMENTO_PK2\n";

        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "P":
                    //model.setResultSet(Select(sql + " WHERE documento.TDOC_CAMPO LIKE '%" + model.getNomeCampo() + "%'"));
                    break;
            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.DocumentoDocumentoModel p = new br.com.documentar.model.DocumentoDocumentoModel();
                //documento origem
                p.getDocumentoOrigem().getProduto().setCodigo(rs.getInt("TPRO_CODIGO_PK"));
                p.getDocumentoOrigem().getProduto().setNome(rs.getString("TPRO_NOME"));

                p.getDocumentoOrigem().getCategoriaVersao().getVersao().setCodigo(rs.getInt("TVER_CODIGO_PK"));
                p.getDocumentoOrigem().getCategoriaVersao().getVersao().setNome(rs.getString("TVER_NOME"));

                p.getDocumentoOrigem().getCategoriaVersao().getCategoria().setCodigo(rs.getInt("TCAT_CODIGO_PK"));
                p.getDocumentoOrigem().getCategoriaVersao().getCategoria().setNome(rs.getString("TCAT_NOME"));

                p.getDocumentoOrigem().getCategoriaVersao().getTelaModel().setCodigo(rs.getInt("TTEL_CODIGO_PK"));
                p.getDocumentoOrigem().getCategoriaVersao().getTelaModel().setNome(rs.getString("TTEL_NOME"));

                p.getDocumentoOrigem().setCodigo(rs.getInt("TDOC_DOCUMENTO_PK1"));
                p.getDocumentoOrigem().setNomeCampo(rs.getString("TDOC_CAMPO"));

                //documento de destino
                p.getDocumentoDestino().getProduto().setCodigo(rs.getInt("TPRO_CODIGO_PK2"));
                p.getDocumentoDestino().getProduto().setNome(rs.getString("TPRO_NOME2"));

                p.getDocumentoDestino().getCategoriaVersao().getVersao().setCodigo(rs.getInt("TVER_CODIGO_PK2"));
                p.getDocumentoDestino().getCategoriaVersao().getVersao().setNome(rs.getString("TVER_NOME2"));

                p.getDocumentoDestino().getCategoriaVersao().getCategoria().setCodigo(rs.getInt("TCAT_CODIGO_PK2"));
                p.getDocumentoDestino().getCategoriaVersao().getCategoria().setNome(rs.getString("TCAT_NOME2"));

                p.getDocumentoDestino().getCategoriaVersao().getTelaModel().setCodigo(rs.getInt("TTEL_CODIGO_PK2"));
                p.getDocumentoDestino().getCategoriaVersao().getTelaModel().setNome(rs.getString("TTEL_NOME2"));

                p.getDocumentoDestino().setCodigo(rs.getInt("TDOC_DOCUMENTO_PK2"));
                p.getDocumentoDestino().setNomeCampo(rs.getString("TDOC_CAMPO2"));
                model.getListaDocumento().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }
        return model.getListaDocumento();
    }
}
